package com.smedi.ismedi.database.starter.util;

import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import lombok.Builder;
import lombok.Data;

import java.io.File;
import java.util.HashMap;
import java.util.Map;

/**
 * @author yangzhenzhou
 * @since 2022/12/16
 */
@Builder
@Data
public class AutoGeneratorParams {
    /**
     * 配置文件地址
     * 默认读取resource/config/application-test.yml
     */
    private String configPath;
    /**
     * 数据库url
     */
    private String url;

    /**
     * 数据库账号
     */
    private String userName;

    /**
     * 数据库密码
     */
    private String password;

    private String driverClassName;

    /**
     * 作者名,默认为AutoGenerator
     */
    private String author;

    /**
     * 指定输出目录/文件夹创建的根目录
     * 如果不传默认路径为  xxxx\xxxx-core\src\main\java
     * xxxx为当前项目根目录的最后一个文件夹（可以成项目名）
     */
    private String outPutDir;

    private String outPutApiDir;

    /**
     * 父包名，可自定义，默认为com.smedi.ismedi
     */
    private String parentName;

    /**
     * 模块名：例如：labor、project、safetyCheck 等
     */
    private String moduleName;

    /**
     * 指定mapperXml的地址， 默认为 xxxx\xxxx-core\src\main\resources\myBatisMapping，xxxx为项目名
     */
    private String mapperXmlUrl;

    /**
     * 需要生成的表名，用逗号隔开 例如 "qlt_hidden_danger,qlt_hidden_danger"
     */
    private String tabs;

    /**
     * 需要生成基础接口的表，默认为空，用逗号隔开 例如"qlt_hidden_danger,qlt_hidden_danger"
     * 如果不填写将会对每一个表生成增删改查等基础接口和对应的request、response、command、model等参数类
     * 建议填写需要生成接口的表，否则会导致产生大量代码
     */
    private String apiTabs;
    /**
     * 表名与注释的对应列表
     */
    private Map<String, String> tableCommentMap;
    /**
     * 需要去除的表名前缀 例如 qlt_或sfc_等，默认为空
     */
    private String prefix;

    /**
     * 需要去除的表名后缀 例如 _tab或_info等,默认为空
     */
    private String suffix;

    public String getDriverClassName() {
        if (StringUtils.isNotBlank(this.driverClassName)) {
            return this.driverClassName;
        }
        return "com.mysql.cj.jdbc.Driver";
    }

    /**
     * 配置文件地址，可手动输入指定
     * 默认读取当前
     * resources/config/application-test.yml
     */
    public String getConfigPath() {
        if (StringUtils.isBlank(this.configPath)) {
            return "config" + File.separator + "application-test.yml";
        } else {
            return this.configPath;
        }
    }

    public String getUrl() {
        if (StringUtils.isNotBlank(this.url)) {
            return this.url;
        }
        return null;
    }

    public String getUserName() {
        if (StringUtils.isNotBlank(this.userName)) {
            return this.userName;
        }
        return null;
    }

    public String getPassword() {
        if (StringUtils.isNotBlank(this.password)) {
            return this.password;
        }
        return null;
    }

    public String getPrefix() {
        if (null == this.prefix) {
            return "";
        } else {
            return this.prefix;
        }
    }

    public String getSuffix() {
        if (null == this.suffix) {
            return "";
        } else {
            return this.suffix;
        }
    }

    public String getAuthor() {
        if (null == this.author) {
            return "AutoGenerator";
        } else {
            return this.author;
        }
    }

    public String getOutPutDir() {
        if (StringUtils.isBlank(this.outPutDir)) {
            String root = System.getProperty("user.dir");
            String[] files = root.split("\\\\");
            return root + File.separator + files[files.length - 1] + "-core" + File.separator + "src" + File.separator + "main" + File.separator + "java";
        } else {
            return this.outPutDir;
        }
    }
    public String getOutPutApiDir() {
        if (StringUtils.isBlank(this.outPutApiDir)) {
            String root = System.getProperty("user.dir");
            String[] files = root.split("\\\\");
            return root + File.separator + files[files.length - 1] + "-api" + File.separator + "src" + File.separator + "main" + File.separator + "java";
        } else {
            return this.outPutApiDir;
        }
    }

    public String getParentName() {
        if (StringUtils.isBlank(this.parentName)) {
            return "com.smedi.ismedi";
        } else {
            return this.parentName;
        }
    }

    public String getMapperXmlUrl() {
        if (StringUtils.isBlank(this.mapperXmlUrl)) {
            String root = System.getProperty("user.dir");
            String[] files = root.split("\\\\");
            return root + File.separator + files[files.length - 1] + "-core" + File.separator + "src" + File.separator + "main" + File.separator + "resources" + File.separator + "myBatisMapping";
        } else {
            return this.mapperXmlUrl;
        }
    }

    public Map<String, String> getTableCommentMap() {
        if (null == this.tableCommentMap) {
            return new HashMap<>();
        } else {
            return this.tableCommentMap;
        }
    }

}
